package com.study.studyfive.quartz.demo;

import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;

/**
 * @author zhangwei
 * @version 1.0
 * @date 2023/9/24 15:34
 */
public class QuartzTest {


    public static void main(String[] args) throws Exception {
        //demo1();
        demo2();
    }


    //简单demo1
    public static void demo1()throws Exception{
        //1. 创建一个JobDetail，把实现了Job接口的类邦定到JobDetail 构建者模式 绑定job withIdentity这里起一个唯一的名字
        JobDetail jobDetail= JobBuilder.newJob(MyJob.class).withIdentity("demo1").build();
        //第二个组件 Trigger触发器
        //2.创建一个Trigger触发器的实例，定义该job立即执行，并且每2秒执行一次，一直执行 repeatForever重复
        SimpleTrigger trigger= TriggerBuilder
                .newTrigger()
                .withIdentity("trriger1")
                .startNow()
                .withSchedule(SimpleScheduleBuilder.simpleSchedule()
                        .withIntervalInSeconds(2)
                        .repeatForever())
                .build();
        //创建schedule实例  三 调度器   StdSchedulerFactory 工厂模式
        StdSchedulerFactory factory = new StdSchedulerFactory();
        //获取调度器实例
        Scheduler scheduler = factory.getScheduler();
        //开启调度器
        scheduler.start();
        //把SimpleTrigger和JobDetail注册给调度器
        scheduler.scheduleJob(jobDetail,trigger);
    }

    //  demo2   cron表达式

    public static void demo2()throws Exception{
        //1. 创建一个JobDetail，把实现了Job接口的类邦定到JobDetail
        JobDetail jobDetail= JobBuilder.newJob(SecondJob.class)
                .withIdentity("demo2")
                .usingJobData("name","zhangan")
                .build();
        //每日的10点50分45秒触发任务
        CronTrigger trigger=TriggerBuilder.newTrigger().withIdentity("trriger2")
                .withSchedule(CronScheduleBuilder
                        //每隔5秒执行一次  */5 * * * * ?
                        //每隔5分钟执行一次  0 */5 * * * ?
                        //每天23点执行一次  0 0 23 * * * ?
                        //每天凌晨1点执行一次  0 0 1 * * * ?
                        //每月1号凌晨1点执行一次  0 0 1 1 * * ?
                        .cronSchedule("*/5 * * * * ?"))
                .build();
        //创建schedule实例
        StdSchedulerFactory factory = new StdSchedulerFactory();
        //获取调度器实例
        Scheduler scheduler = factory.getScheduler();
        //开启调度器
        scheduler.start();
        //把SimpleTrigger和JobDetail注册给调度器
        scheduler.scheduleJob(jobDetail,trigger);

    }

}
